package cn.com.gridinfo.sooc.core.course.directory;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ExpandableListView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.jeremy.arad.Arad;

import org.apache.http.message.BasicNameValuePair;

import java.util.ArrayList;
import java.util.List;

import butterknife.ButterKnife;
import butterknife.InjectView;
import cn.com.gridinfo.sooc.R;
import cn.com.gridinfo.sooc.base.BaseSoocFragment;
import cn.com.gridinfo.sooc.common.LocalMark;
import cn.com.gridinfo.sooc.core.course.classes.bean.CourseDetailsInfo;
import cn.com.gridinfo.sooc.core.course.classes.bean.EventCourse;
import cn.com.gridinfo.sooc.core.course.common.CodeConst;
import cn.com.gridinfo.sooc.core.course.directory.adapter.PinnedHeaderExpandableAdapter;
import cn.com.gridinfo.sooc.core.course.directory.adapter.PinnedHeaderExpandableListView;
import cn.com.gridinfo.sooc.core.course.directory.bean.Content;
import cn.com.gridinfo.sooc.core.course.directory.bean.Directory;
import cn.com.gridinfo.sooc.core.course.directory.bean.MenuDisplay;
import cn.com.gridinfo.sooc.core.course.directory.dao.CourseDirectoryDao;
import cn.com.gridinfo.sooc.core.course.pay.activity.BuyCourseActivity;
import cn.com.gridinfo.sooc.core.course.pay.activity.PayOrderActivity;
import cn.com.gridinfo.sooc.utils.IntentUtil;
import cn.com.gridinfo.sooc.utils.MessageUtils;

/**
 * 课程—目录
 * Created by yingchunli on 2015/12/30.
 */
public class DirectoryFragment extends BaseSoocFragment {

    View view;//当前界面
    @InjectView(R.id.directory_list)
    PinnedHeaderExpandableListView directory_list_view;//列表控件
    public static PinnedHeaderExpandableAdapter adapter;//适配器
    public static MenuDisplay nextMenuDisplay;//下一个素材播放内容
    public List<MenuDisplay> menuAllList;//展示目录数据
    CourseDirectoryDao dao;//课程目录DAO
    CourseDetailsInfo courseInfo;//课程详情
    MenuDisplay currMenuDisplay;//当前播放的目录内容
    @InjectView(R.id.blank_view)
    RelativeLayout blankView;//空白页展示
    @InjectView(R.id.tipBlank)
    TextView tipBlank;//提示空白文字

    String tipTxt = "课程好是好,可惜现在看不了~";

    public static DirectoryFragment newInstance(CourseDetailsInfo courseDetailsInfo) {
        Bundle args = new Bundle();
        DirectoryFragment fragment = new DirectoryFragment();
        args.putSerializable("courseInfo", courseDetailsInfo);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.course_directory_list, null);
        ButterKnife.inject(this, view);
        Arad.bus.register(this);
        dao = new CourseDirectoryDao(this);
        blankView.setVisibility(View.GONE);
        tipBlank.setText(tipTxt);
        //获取课程详情
        courseInfo = (CourseDetailsInfo) getArguments().getSerializable("courseInfo");
        //如果课程锁定（目录为空）
        if (courseInfo.getKcsd() == 1) {
            blankView.setVisibility(View.VISIBLE);
        } else {
            //调用课程目录接口
            dao.getDirectory(courseInfo.getKcid());
        }
        return view;
    }

    /**
     * 初始化界面数据
     */
    private void initView() {


        //设置目录数据
        menuAllList = getMenuDisplayList(dao.getDirectoryList());
        //设置悬浮头部VIEW
        directory_list_view.setHeaderView(LayoutInflater.from(getContext()).inflate(R.layout.course_directory_head, directory_list_view, false));
        //处理目录界面展示数据；
        adapter = new PinnedHeaderExpandableAdapter(menuAllList, getActivity(), directory_list_view);
        directory_list_view.setAdapter(adapter);
        //设置全部展开
        for (int i = 0; i < adapter.getGroupCount(); i++) {

            directory_list_view.expandGroup(i);

        }
        //去掉默认图标
        directory_list_view.setGroupIndicator(null);
        //设置章目录不可点击
        directory_list_view.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
            public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
                return true;
            }
        });

        //点击素材目录
        directory_list_view.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
            @Override
            public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
                //只有点击三级目录素材内容 才会更新播放内容
                int menuLevel = menuAllList.get(groupPosition).getSubList().get(childPosition).getMenuLevel();
                //点击素材内容时,设置当前播放素材内容
                if (3 == menuLevel) {
                    currMenuDisplay = menuAllList.get(groupPosition).getSubList().get(childPosition);
                    //课程是否收费
                    if (Arad.preferences.getBoolean(LocalMark.IS_PAY.getName()) && courseInfo.getIs_charge().equals("1")) {
                        //收费课程情况下，
                        //点击是否为第一个素材
                        if (!adapter.getFristSucai().getNrid().equals(currMenuDisplay.getNrid())) {
                            //不是第一个素材
                            if (courseInfo.getIs_charge().equals("1")) {
                                //进入购买课程页面
                                if (courseInfo.getIsBuy() == 0) {
                                    //进入购买课程页面
                                    IntentUtil.intentSlidIn(getActivity(), BuyCourseActivity.class, 00, new BasicNameValuePair("kcid", courseInfo.getKcid()),
                                            new BasicNameValuePair("kcmc", courseInfo.getKcmc()), new BasicNameValuePair("price", courseInfo.getPrice()),
                                            new BasicNameValuePair("kcls", courseInfo.getUname()), new BasicNameValuePair("kcfm", courseInfo.getKcfm()));
                                } else if (courseInfo.getIsBuy() == 2) {
                                    //进入支付页面
                                    IntentUtil.intentSlidIn(getActivity(), PayOrderActivity.class, 00, new BasicNameValuePair("kcid", courseInfo.getKcid()),
                                            new BasicNameValuePair("kcmc", courseInfo.getKcmc()), new BasicNameValuePair("price", courseInfo.getPrice()),
                                            new BasicNameValuePair("kcls", courseInfo.getUname()));
                                } else {
                                    setCurrPlay(true);
                                }
                            } else {
                                setCurrPlay(true);
                            }
                        } else {
                            setCurrPlay(true);
                        }
                    } else {
                        //设置当前播放素材,是手动点击播放素材
                        setCurrPlay(true);
                    }
                }
                //点击节时提示没有任何可播放的内容
                if (2 == menuLevel) {
                    //处理每章最后一节是否有素材
                    if (menuAllList.get(groupPosition).getSubList().size() <= (childPosition + 1)) {
                        MessageUtils.showImageShortToast(getActivity(), "本节内容暂时为空或未开放");
                    }
                    //处理非最后一节下是否有素材
                    else if (menuAllList.get(groupPosition).getSubList().get(childPosition + 1).getNrid() == null) {
                        MessageUtils.showImageShortToast(getActivity(), "本节内容暂时为空或未开放");
                    }

                }
                return false;
            }
        });

        //判断课程是否收费 是否成功加入课程
        if (Arad.preferences.getBoolean(LocalMark.IS_PAY.getName()) && courseInfo.getIs_charge().equals("1")) {
            if (courseInfo.getIsBuy() == 0 || courseInfo.getIsBuy() == 2) {
                //没有成功加入课程
                //第一个素材显示免费试学文字
                adapter.showFreeStudyText();
            } else {
                //加入课程了
                setCurrPlay(false);
            }
        } else {
            //初始化设置当前播放素材,不是手动点击播放,自动播放当前素材
            setCurrPlay(false);
        }

    }


    //接口成功返回数据
    @Override
    public void onRequestSuccess(int requestCode) {
        super.onRequestSuccess(requestCode);
        if (dao.getStatus().equals("0")) {
            switch (requestCode) {
                case CodeConst.COURSE_DIRECOTRY:
                    //初始化课程目录
                    initView();
                    break;
            }
        } else {
            MessageUtils.showImageShortToast(getActivity(), dao.getStatusCode());
        }
    }


    @Override
    public void onDestroyView() {
        super.onDestroyView();
        ButterKnife.reset(this);
        Arad.bus.unregister(this);
    }


    /**
     * 格式化目录结构 用来展示目录,
     * 目录为两级 章, 节和素材
     *
     * @param directoryList
     * @return
     */
    private List<MenuDisplay> getMenuDisplayList(List<Directory> directoryList) {

        //整个目录列表
        List<MenuDisplay> menuDisplayList = new ArrayList<MenuDisplay>();
        //素材 列表 主要用于 未加入课程时,默认播放第一个素材应用(第一章第一节第一个素材,第一节没有素材,默认播放第二节素材,以此类推)
        List<MenuDisplay> subMenu3List = new ArrayList<MenuDisplay>();

        int gpositon = 0;//章位置
        if (directoryList == null || directoryList.isEmpty()) {
            return menuDisplayList;
        }
        //章
        for (Directory directory : directoryList) {

            MenuDisplay menuDisplay = new MenuDisplay();
            menuDisplay.setPmid(directory.getMlid());//章ID
            menuDisplay.setMlmc(directory.getMlmc());//章名称
            menuDisplay.setPmmc(directory.getMlmc());//章名称
            menuDisplay.setRead(directory.getRead());//表示素材是否学完 1：学完 0：没有
            menuDisplay.setMenuLevel(1);//一级目录
            menuDisplay.setGpositon(gpositon);
            //节 和 素材 列表
            List<MenuDisplay> subMenuList = new ArrayList<MenuDisplay>();

            int sposition = 0;//节和素材位置
            //节
            for (Directory subDirectory : directory.getSub()) {

                MenuDisplay subMenu = new MenuDisplay();
                subMenu.setPmid(subDirectory.getFid());//章ID
                subMenu.setSmid(subDirectory.getMlid());//节ID
                subMenu.setPmmc(directory.getMlmc());//章名称
                subMenu.setMlmc(subDirectory.getMlmc());// 节名称
                subMenu.setSmmc(subDirectory.getMlmc());//节名称
                subMenu.setMenuLevel(2);//二级目录
                subMenu.setGpositon(gpositon);//父目录位置
                subMenu.setSpositon(sposition);//设置节所在位置
                subMenu.setRead(subDirectory.getRead());//表示素材是否学完 1：学完 0：没有
                subMenuList.add(subMenu);//加入节
                sposition++;
                //素材
                for (Content content : subDirectory.getContent()) {
                    MenuDisplay menuSucai = new MenuDisplay();
                    menuSucai.setPmid(content.getPmlid());//章ID
                    menuSucai.setSmid(content.getMlid());//节ID
                    menuSucai.setNrid(content.getNrid());//素材ID
                    menuSucai.setPmmc(directory.getMlmc());//章名称
                    menuSucai.setSmmc(subDirectory.getMlmc());//节名称
                    menuSucai.setMlmc(content.getNrmc());// 素材名称
                    menuSucai.setNrmc(content.getNrmc());// 素材名称
                    menuSucai.setNrlx(content.getNrlx());//素材类型
                    menuSucai.setRead(content.getRead());//表示素材是否学完 1：学完 0：没有
                    menuSucai.setIschange(content.getIschange());//是否 转码成功 0 正在转码 1 转码成功
                    menuSucai.setFile(content.getFile());//文件地址
                    menuSucai.setNewfile(content.getNewfile());//文档的时候读取 newfile
                    menuSucai.setCurrent_time(content.getCurrent_time());//设置当前播放时间
                    menuSucai.setMenuLevel(3);//三级目录
                    menuSucai.setGpositon(gpositon);//父目录位置
                    menuSucai.setSpositon(sposition);//设置素材所在位置

                    //已加入课程并且有历史记录,并且历史记录素材播放内容不为空
                    if (courseInfo.getSelect() == 1) {
                        if (courseInfo.getHistory() != null && courseInfo.getHistory().getNrid() != null) {
                            if (courseInfo.getHistory().getPmlid().equals(menuSucai.getPmid())
                                    && courseInfo.getHistory().getMlid().equals(menuSucai.getSmid())
                                    && courseInfo.getHistory().getNrid().equals(menuSucai.getNrid())) {
                                currMenuDisplay = menuSucai;//设置当前播放素材
                            }
                        }
                    }
                    sposition++;
                    subMenuList.add(menuSucai);//在节下加入素材
                    subMenu3List.add(menuSucai);
                }
            }


            menuDisplay.setSubList(subMenuList);
            gpositon++;
            menuDisplayList.add(menuDisplay);
        }

        //当前目录列表不为空时
        if (!menuDisplayList.isEmpty() && !menuDisplayList.get(0).getSubList().isEmpty()) {
            //1. 平台收费，课程收费
            //1.2.是否购买，未购买：无操作，已购买（有历史记录，无素材）：默认第一个
            if (Arad.preferences.getBoolean(LocalMark.IS_PAY.getName()) && courseInfo.getIs_charge().equals("1")) {
                if (courseInfo.getIsBuy() == 1 && courseInfo.getHistory().getNrid() == null) {
                    //默认播放第一个素材(第一章第一节第一个素材,第一节没有素材默认播放第二节第一个素材,以此类推)
                    if (!subMenu3List.isEmpty()) {
                        currMenuDisplay = subMenu3List.get(0);
                    }
                }
            } else {
                //2平台不收费，没加入课程
                if (courseInfo.getSelect() == 0) {
                    //默认播放第一个素材(第一章第一节第一个素材,第一节没有素材默认播放第二节第一个素材,以此类推)
                    if (!subMenu3List.isEmpty()) {
                        currMenuDisplay = subMenu3List.get(0);
                    }
                }
            }
        }
        return menuDisplayList;
    }


    /**
     * 设置目录当前播放位置,以及当前播放素材
     *
     * @param isClick 手动点击目录播放(true)还是,进入课程详情自动播放(false)
     */
    public void setCurrPlay(boolean isClick) {

        //设置当前播放素材
        if (currMenuDisplay != null) {

//            adapter.setSelectorRefresh(currMenuDisplay.getGpositon(), currMenuDisplay.getSpositon());//设置选中
            adapter.getNextMenuDisplay3(currMenuDisplay.getGpositon(), currMenuDisplay.getSpositon());
            nextMenuDisplay = adapter.getNextMenuDisplay();

            //不是手动点击目录时设置目录当前自动选中的素材的颜色
            if (!isClick) {
                directory_list_view.setSelectedChild(currMenuDisplay.getGpositon(), currMenuDisplay.getSpositon() - 1, true);
            }
        }
        //当前需要播放的素材内容找不到,或者不存在
        else {
            //只针对已加入课程做处理,
            // 已加入课程,但是当前播放的内容不存在或者找不到
            if (courseInfo.getSelect() == 1) {
                MessageUtils.showImageShortToast(getActivity(), "您要查看的内容不存在,请选择其他章节");
            }
        }

        //监控当前播放素材
        EventCourse eventCourse = new EventCourse(isClick, currMenuDisplay, nextMenuDisplay);
        //监控当前播放素材
        Arad.bus.post(eventCourse);
    }

    //视频播放结束，自动播放下一个素材
    public void onEventMainThread(MenuDisplay currDisplayInfo) {
        //设置当前播放素材
        currMenuDisplay = currDisplayInfo;
        setCurrPlay(true);
    }

}